// 2013年版权归Go作者所有。版权所有。
// 此源代码的使用受BSD样式的约束
// 可以在许可证文件中找到的许可证。

// 该文件实现objsets。
// None
// objset与Scope相似，但与objset元素不同
// 由其唯一id标识，而不是
// 对象名。

package types2

// objset是由其唯一id标识的一组对象。
// objset的零值是一个随时可用的空objset。
type objset map[string]Object // 懒散地初始化

// insert尝试将对象obj插入objset s。
// 如果s已包含具有alt的替代对象
// 相同的名称，insert使s保持不变并返回alt。
// 否则，它将插入obj并返回nil。
func (s *objset) insert(obj Object) Object {
	id := obj.Id()
	if alt := (*s)[id]; alt != nil {
		return alt
	}
	if *s == nil {
		*s = make(map[string]Object)
	}
	(*s)[id] = obj
	return nil
}
